using System;
using System.Collections.Generic;
using System.Linq;

namespace UserManagement
{
    /// <summary>
    /// IUserService接口的实现类
    /// </summary>
    public class UserService1 : IUserService
    {
        // 使用泛型集合保存注册用户信息
        private readonly List<User> _userList = new List<User>();
        private long _nextId = 1; // 用于生成用户ID
        
        public bool Register(User user)
        {
            // 检查用户名是否已存在
            if (FindUserByUsername(user.Username) != null)
            {
                Console.WriteLine($"用户名已存在: {user.Username}");
                return false;
            }
            
            // 为新用户分配ID
            user.Id = _nextId++;
            
            // 添加到用户列表
            _userList.Add(user);
            Console.WriteLine($"用户注册成功: {user.Username}");
            return true;
        }
        
        public User Login(string username, string password)
        {
            // 使用foreach循环进行数据迭代
            foreach (var user in _userList)
            {
                if (user.Username == username && user.Password == password)
                {
                    Console.WriteLine($"用户登录成功: {username}");
                    return user;
                }
            }
            Console.WriteLine($"用户名或密码错误: {username}");
            return null;
        }
        
        public List<User> GetAllUsers()
        {
            return new List<User>(_userList); // 返回副本，防止外部修改
        }
        
        public User FindUserByUsername(string username)
        {
            // 使用foreach循环进行数据迭代
            foreach (var user in _userList)
            {
                if (user.Username == username)
                {
                    return user;
                }
            }
            return null;
        }
        
        public bool DeleteUserById(long id)
        {
            // 删除时使用for循环
            for (int i = 0; i < _userList.Count; i++)
            {
                var user = _userList[i];
                if (user.Id == id)
                {
                    _userList.RemoveAt(i);
                    Console.WriteLine($"用户删除成功: {user.Username}");
                    return true;
                }
            }
            Console.WriteLine($"用户删除失败，未找到ID为 {id} 的用户");
            return false;
        }
        
        public bool UpdateUser(User user)
        {
            // 使用foreach循环查找用户
            for (int i = 0; i < _userList.Count; i++)
            {
                var existingUser = _userList[i];
                if (existingUser.Id == user.Id)
                {
                    // 检查更新后的用户名是否已被其他用户使用
                    var userWithSameUsername = FindUserByUsername(user.Username);
                    if (userWithSameUsername != null && userWithSameUsername.Id != user.Id)
                    {
                        Console.WriteLine($"更新失败，用户名已存在: {user.Username}");
                        return false;
                    }
                    
                    _userList[i] = user;
                    Console.WriteLine($"用户更新成功: {user.Username}");
                    return true;
                }
            }
            Console.WriteLine($"用户更新失败，未找到用户: {user.Id}");
            return false;
        }
    }
}
